home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include "wingui\pattern.h"
- #include "wingui\wizunzip.h"
- #define UNZIP_INTERNAL
- #include "unzip.h"
- #include "wingui\helpids.h"
-
-
- char __based(__segname("STRINGS_TEXT")) szNoMatch[] =
- "No entry matches the pattern!";
- /****************************************************************************
-
- FUNCTION: PatternSelectProc(HWND, unsigned, WPARAM, LPARAM)
-
- PURPOSE: Processes messages for "Select Files by Pattern" dialog box
-
- MESSAGES:
-
- WM_INITDIALOG - initialize dialog box
- WM_COMMAND - Input received
-
- ****************************************************************************/
-
- #ifdef __BORLANDC__
- #pragma warn -par
- #endif
- BOOL WINAPI
- PatternSelectProc(HWND hwndDlg, WORD wMessage, WPARAM wParam, LPARAM lParam)
- {
- static HWND hSelect, hDeselect, hPattern;
- PSTR psLBEntry = NULL; /* list box entry */
- PSTR psPatternBuf = NULL; /* pattern collection */
- DWORD cListItems; /* no. items in listbox */
- UINT Fname_Inx; /* index into LB entry */
- BOOL fSelect; /* we're selecting if TRUE */
- int nPatternLength; /* length of data in pattern edit window */
-
-
- switch (wMessage) {
- case WM_INITDIALOG:
- hSelect = GetDlgItem(hwndDlg, IDOK);
- hDeselect = GetDlgItem(hwndDlg, IDM_PATTERN_DESELECT);
- hPattern = GetDlgItem(hwndDlg, IDM_PATTERN_PATTERN);
- CenterDialog(GetParent(hwndDlg), hwndDlg);
- return TRUE;
- case WM_COMMAND:
- switch (LOWORD(wParam)) {
- case IDM_PATTERN_PATTERN:
- if (GET_WM_COMMAND_CMD(wParam, lParam) == EN_CHANGE)
- {
- if ((nPatternLength = GetWindowTextLength(hPattern))==1)
- {
- /* Enable or disable buttons depending on fullness of
- * "Suffix" box.
- */
- BOOL fButtonState = TRUE ;
- WinAssert(hSelect);
- EnableWindow(hSelect, fButtonState);
- WinAssert(hDeselect);
- EnableWindow(hDeselect, fButtonState);
- }
- if (nPatternLength == 0)
- {
- BOOL fButtonState = FALSE;
- WinAssert(hSelect);
- EnableWindow(hSelect, fButtonState);
- WinAssert(hDeselect);
- EnableWindow(hDeselect, fButtonState);
- }
- }
- break;
-
- case IDOK: /* Select items using pattern */
- case IDM_PATTERN_DESELECT:
- fSelect = (BOOL)(LOWORD(wParam) == IDOK);
- /* Be sure that listbox contains at least 1 item,
- * that a pattern exists (is non-null), and
- * that we can buffer them.
- */
- if ((cListItems = SendMessage(hWndList, (UINT)LB_GETCOUNT, 0, 0L)) != (UINT)LB_ERR &&
- cListItems >= 1U &&
- (nPatternLength = GetWindowTextLength(hPattern)) >= 1 &&
- (psPatternBuf = /* get a buffer for the file name */
- (PSTR)LocalAlloc(LMEM_FIXED, nPatternLength+1)) != NULL &&
- (psLBEntry = /* get a buffer for the file name */
- (PSTR)LocalAlloc(LMEM_FIXED, FILNAMSIZ+LONG_FORM_FNAME_INX)) != NULL &&
- GetWindowText(hPattern, psPatternBuf, nPatternLength+1) > 0)
- {
- DWORD cItemsSelected = 0; /* no. "hits" during pattern search */
- UINT uLBInx;
- PSTR psPattern; /* points to any one pattern in buffer */
- static char DELIMS[] = " \t,"; /* delimiters, mostly whitespace */
-
- #ifndef __BORLANDC__
- _strlwr(psPatternBuf); /* convert pattern to lower case */
- #else
- strlwr(psPatternBuf); /* convert pattern to lower case */
- #endif
- Fname_Inx = (UINT)(uf.fFormatLong ? LONG_FORM_FNAME_INX : SHORT_FORM_FNAME_INX);
- /* march through list of patterns in edit field */
- #if (defined MSC) && (!defined WIN32)
- for (psPattern = strtok(psPatternBuf, DELIMS);
- psPattern != NULL; psPattern = strtok(NULL, DELIMS))
- #else
- for (psPattern = (PSTR)strtok(psPatternBuf, DELIMS);
- psPattern != NULL; psPattern = (PSTR)strtok(NULL, DELIMS))
- #endif
- {
-
- /* March thru listbox matching the complete path with every entry.
- * Note: unzip's match() function probably won't work for national
- * characters above the ASCII range.
- */
- for (uLBInx = 0; uLBInx < cListItems; uLBInx++)
- {
- /* Retrieve listbox entry */
- if (SendMessage(hWndList, LB_GETTEXT, uLBInx, (LPARAM)((LPSTR)psLBEntry)) >
- (LRESULT)Fname_Inx)
- {
- #ifndef __BORLANDC__
- _strlwr(&psLBEntry[Fname_Inx]); /* convert filename to lower case */
- #else
- strlwr(&psLBEntry[Fname_Inx]); /* convert filename to lower case */
- #endif
- /* Use UnZip's match() function */
- /* MW: verify that we really want to ignore case */
- if (match(&psLBEntry[Fname_Inx], psPattern, TRUE))
- {
- SendMessage(hWndList, LB_SETSEL, (WPARAM)fSelect,
- MAKELPARAM(uLBInx,0));
- cItemsSelected++;
- }
- }
- }
- }
- if (!cItemsSelected) /* If no pattern match */
- {
- MessageBox(hwndDlg, szNoMatch, szAppName, MB_OK | MB_ICONASTERISK);
- }
- else /* one or more items were selected */
- {
- UpdateButtons(hWndMain); /* turn main push buttons on or off */
- }
- }
- if (psLBEntry)
- LocalFree((HLOCAL)psLBEntry);
-
- if (psPatternBuf)
- LocalFree((HLOCAL)psPatternBuf);
- break;
- case IDCANCEL:
- PostMessage(hwndDlg, WM_CLOSE, 0, 0L);
- break;
- case IDM_PATTERN_HELP:
- WinHelp(hwndDlg,szHelpFileName,HELP_CONTEXT, (DWORD)(HELPID_SELECT_BY_PATTERN));
- break;
- }
- return TRUE;
- case WM_CLOSE:
- DestroyWindow(hwndDlg);
- hPatternSelectDlg = 0; /* flag dialog inactive */
- return TRUE;
- }
- return FALSE;
- }
- #ifdef __BORLANDC__
- #pragma warn .par
- #endif
-
-